﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using Data.Abstract;
using System.Data.SQLite;
using System.Data;

namespace Data
{
    public class Persona : BaseObject<SimplePersona>
    {
        #region Propiedades
      
        new public DalPersona Dal
        {
            get
            {
                if (_Dal == null) _Dal = new DalPersona();
                return (DalPersona)_Dal;
            }
        }
        CollectionVisita _Visitas;
        public CollectionVisita Visitas
        {
            get { return _Visitas; }
        }
        CollectionPosicion _Posiciones;
        public CollectionPosicion Posiciones
        {
            get { return _Posiciones; }
        }
        SimplePosicion _PosicionActual;
        public SimplePosicion PosicionActual
        {
            get { return _PosicionActual; }
        }
        public DateTime UltimaVisita
        {
            get
            {
                LoadVisitas();
                return this._Visitas[this._Visitas.Count - 1].Fecha;
            }
        }

        SQLiteConnection _conn;
        #endregion
        #region Procedimientos
         public Persona(): base()
        {
            _Dal = new DalPersona();
        }
         public Persona(SimplePersona Simple): base()
        {
            this._Simple = Simple;
            _Dal = new DalPersona(getConn());

        }
         public Persona(SimplePersona Simple, SQLiteConnection conn )
             : base()
         {
             this._conn = conn;
             _Dal = new DalPersona(conn);
             _Simple = Simple;
         }
         public Persona(SQLiteConnection conn)
             : base()
         {
             this._conn = conn;
             _Dal = new DalPersona(conn);
             
         }
  
  
         
        #endregion
        #region Metodos
         public CollectionVisita LoadVisitas()
         {
             CollectionVisita cv = new CollectionVisita(this._conn);
             cv.LoadByPersona(this.Simple.Id);
             this._Visitas = cv;
             return cv;
         }
         public CollectionPosicion LoadPosiciones()
         {
             CollectionPosicion cp = new CollectionPosicion(this._conn);
             cp.LoadByPersona(this.Simple.Id);
             this._Posiciones = cp;
             return cp;
         }
         public SimplePosicion LoadPosicionActual()
         {
             CollectionPosicion cp = new CollectionPosicion(this._conn);
             cp.LoadByPersona(this.Simple.Id);
             this._PosicionActual = cp[0];
             return cp[0];
         }
        public override void Insert()
        {
           this.Simple.Id = this.Dal.Insert(this._Simple);
        }
        public override void Update()
        {
            this.Dal.Update(this._Simple);
        }
        public override void Delete()
        {
            throw new NotImplementedException();
        }

        #endregion
        SQLiteConnection getConn()
        {
            if (this._Simple != null)
            {
                return new SQLiteConnection("data source=" );
            }
            return new SQLiteConnection();
        }

       
    }
}
